




#字符串处理
  # 定义去掉后缀的通用函数
  remove_suffix() {
      local filename=$1
      local suffix=$2

      # 使用参数扩展去掉后缀
      local result="${filename%$suffix}"

      # 返回去掉后缀后的名称
      echo "$result"
  }

#文件夹处理
  # 定义一个函数，用于判断文件夹是否存在
  check_directory() {
      local dir_path=$1

      # 判断文件夹是否存在
      if [ ! -d "$dir_path" ]; then
          echo "文件夹 $dir_path 不存在，流程停止。"
          exit 1  # 停止脚本执行，返回非零状态码
      else
          echo "文件夹 $dir_path 存在，继续执行。"
      fi
  }


# 文件处理
  #判断文件是否存在
  check_file() {
      local file_path=$1
      # 判断文件是否存在
      if [ ! -f "$file_path" ]; then
          echo "文件 $file_path 不存在，流程停止。"
          exit 1  # 停止脚本执行，返回非零状态码
      else
          echo "文件 $file_path 存在，继续执行。"
      fi
  }
  #备份文件
  function backup_file() {
      local package_path="$1"
      if [[ ! -f "$package_path" ]]; then
          echo "错误: 文件 '$package_path' 不存在，无法备份。"
          return 1
      fi
      # 生成备份文件名（带时间戳）
      #local backup_file="${package_path}-$(date +"%Y%m%d.%H%M.%S")"
      # 备份文件
      #cp -rf "$package_path" "$backup_file"
      #if [[ $? -eq 0 ]]; then
      #    echo "备份成功！备份文件路径：$backup_file"
      #    return 0
      #else
      #    echo "错误: 文件备份失败。"
      #    return 1
      #fi
      echo "====================================================================="
      echo ""
      echo "1 y 进行备份  ----备份操作+服务启动操作"
      echo "2 n 不备份时  ----服务启动操作"
      # 提示用户是否进行备份
      read -p "是否要备份文件 $1？(y/n): " confirm
      if [[ $confirm == [yY] ]]; then
          # 执行备份操作
          local backup_file="${package_path}-$(date +"%Y%m%d.%H%M.%S")"
          # 备份文件
          cp -rf "$package_path" "$backup_file"
          # 检查备份是否成功
          if [ $? -eq 0 ]; then
              echo "备份成功！备份文件路径：$backup_file"
              return 0
          else
              echo "错误: 文件备份失败。"
              return 1
          fi
      else
          echo "用户取消备份操作。"
          return 0
      fi

  }

# 压缩包处理
  # 定义解压函数
  extract_zip() {
      local archive_path=$1
      #echo "----------------2"
      # 获取压缩包的父目录
      parent_dir=$(dirname "$archive_path")
      # 删除父目录下除压缩包之外的所有文件夹
      find "$parent_dir" -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} +
      #exit 1
      # 获取解压后的文件名称
     folder_name=$(tar -xzf "$archive_path" --show-transformed-names --transform='s,/*,,1' | head -n 1)
     extracted_folder=$(tar -ztvf "$archive_path" | head -n 1 | awk -F '/' '{print $2}')
     #echo "-------3"
      # 返回解压后的文件名称
      echo "$extracted_folder"
  }


# 文件夹处理







# 服务处理
  # 检查服务是否启动
  check_service() {
      local service_name=$1
      local pid

      # 查找进程ID
      pid=$(pgrep -f "$service_name")

      if [ -z "$pid" ]; then
          echo "服务 $service_name 未启动。"
          return 1
      else
          echo "服务 $service_name 已启动，进程ID: $pid"
          return 0
      fi
  }
  # 终止服务
  stop_service() {
      local service_name=$1
      local pids

      # 查找进程ID
      pids=$(pgrep -f "$service_name")

      if [ -z "$pids" ]; then
          echo "服务 $service_name 未启动，无需终止。"
      else
          echo "正在终止服务 $service_name (进程ID: $pids)..."
          if [ -z "$pids" ]; then
              echo "没有需要终止的进程。"
              exit 0
          fi
          for pid in $pids; do
              echo "111----$pid"
              kill -9 "$pid" || true
              if [ $? -eq 0 ]; then
                  echo "进程 $pid 已成功终止。"
                  break
              else
                  echo "终止进程 $pid 失败。"
              fi
          done
      fi
  }


  # 主逻辑函数
  manage_service() {
      local service_name=$1

      # 检查服务是否启动
      if check_service "$service_name"; then
          # 提示用户是否终止进程
          read -p "是否终止服务 $service_name？(y/n): " user_input
          if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then
              stop_service "$service_name"
          else
              echo "用户取消终止操作。"
          fi
      fi
  }


# sh脚本处理
  # 参数化脚本路径并启动脚本的函数
  start_script_with_args() {
      local script_path=$1  # 第一个参数为脚本路径
      shift  # 移除第一个参数，剩下的为传递给脚本的参数
      local args=("$@")
      echo $(pwd)
      # 检查文件是否存在
      if [ ! -f "$script_path" ]; then
          echo "错误: 文件 $script_path 不存在。"
          return 1
      fi

      # 检查文件是否可执行
      if [ ! -x "$script_path" ]; then
          echo "错误: 文件 $script_path 不可执行。"
          return 1
      fi

      # 启动脚本，并传递参数
      echo "正在启动脚本 $script_path，参数: ${args[*]}..."
      ./"$script_path" "${args[@]}"

      # 检查启动是否成功
      if [ $? -eq 0 ]; then
          echo "脚本 $script_path 启动成功。"
          exit 1
      else
          echo "脚本 $script_path 启动失败。"
          return 1
      fi
  }


# 服务器数据处理
  #获取本地 IP 地址
  get_local_ip() {
      local ip=$(hostname -I | awk '{print $1}')
      if [ -z "$ip" ]; then
          ip=$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d/ -f1 | head -n 1)
      fi
      echo "$ip"
  }

  # 获取公网 IP 地址
  get_public_ip() {
      local ip=$(curl -s ifconfig.me)
      echo "本机公网 IP 地址: $ip"
  }

# 文件替换
  # 替换 application.yml 文件中的字段值
  replace_config() {
      local file_path=$1
      local key=$2
      local value=$3

      # 使用 sed 替换字段值
      sed -i "s|^\($key\s*=\s*\).*|\1$value|" "$file_path"
      echo "$key的值替换成功，替换后value值为：$value"
  }